package com.hr.utils.ai;



import com.fasterxml.jackson.annotation.JsonProperty;
import com.hr.domain.dto.AiHouseDTO;
import com.hr.domain.vo.AiHouseVO;
import com.hr.service.HouseService;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.util.List;

@Component
@RequiredArgsConstructor
public class RentalSearchTool {

    private final HouseService houseService;

    /**
     * 智能租房搜索函数（供大模型调用）
     *
     * @param title         房源标题关键词，如 "近地铁"、"精装修"
     * @param address       区域或地址关键词，如 "天津市河西区"、"南京路"
     * @param rent          预算上限（元/月），如 1500
     * @param description   户型或房屋描述，如 "一室一厅"、"带阳台"
     * @param orientation   朝向，如 "南"、"东"
     * @param area          面积下限（平方米），如 50
     * @param paymentType   支付方式（1、月付 2、季付）
     * @return 自然语言格式的房源推荐结果
     */
    @Tool(name = "searchRentalHouses")
    public String searchRentalHouses(
            @JsonProperty("title") String title,
            @JsonProperty("address") String address,
            @JsonProperty("rent") Integer rent,
            @JsonProperty("description") String description,
            @JsonProperty("orientation") String orientation,
            @JsonProperty("area") BigDecimal area,
            @JsonProperty("paymentType") Integer paymentType) {

        AiHouseDTO dto = new AiHouseDTO();

        //地址
        if (StringUtils.isNotBlank(address)) {
            dto.setAddress(address);
        }

        //租金
        if (rent != null && rent > 0) {
            dto.setRent(new BigDecimal(rent));
        }

        //房屋描述（包括户型）
        if (StringUtils.isNotBlank(description)) {
            dto.setDescription(description);
        }
        //朝向
        if (StringUtils.isNotBlank(orientation)) {
            dto.setOrientation(orientation);
        }
        //面积
        if (area != null && area.compareTo(BigDecimal.ZERO) > 0) {
            dto.setArea(area);
        }
        //支付方式
        if (paymentType != null && paymentType > 0) {
            dto.setPaymentType(paymentType);
        }
        //标题
        if (StringUtils.isNotBlank(title)) {
            dto.setTitle(title);
        }

        // 调用已有的AI专用查询方法
        List<AiHouseVO> houses = houseService.getHouseDetailForAI(dto);

        // 构造自然语言回复
        if (houses == null || houses.isEmpty()) {
            String areaStr = StringUtils.defaultIfBlank(address, "该区域");
            String budgetStr = rent != null ? rent.toString() : "指定预算";
            return String.format("很抱歉，在 %s 预算 %s 元以内暂无符合条件的房源。", areaStr, budgetStr);
        }

        StringBuilder reply = new StringBuilder();
        reply.append(String.format("为您找到 %d 套推荐房源：\n", Math.min(3, houses.size())));
        for (int i = 0; i < Math.min(3, houses.size()); i++) {
            AiHouseVO h = houses.get(i);
            reply.append(String.format("- 【%s】%s | %s元/月\n",
                    StringUtils.defaultIfBlank(h.getTitle(), "优质房源"),
                    StringUtils.defaultIfBlank(h.getAddress(), "地址未详"),
                    h.getRent() != null ? h.getRent().stripTrailingZeros().toPlainString() : "面议"));
        }
        return reply.toString();
    }
}
